package com.iakuil.app.common.core.jsr303.validators;

import cn.hutool.core.convert.Convert;
import com.iakuil.app.common.core.jsr303.constraints.In;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import org.apache.commons.lang3.ArrayUtils;

/**
 * 数值枚举校验器
 *
 * @author Kai
 */
public class InEnumValidator implements ConstraintValidator<In, Integer> {

    private int[] values;

    @Override
    public void initialize(In annotation) {
        this.values = annotation.range();
    }

    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext context) {
        // 为空时，默认不校验，即认为通过
        if (value == null) {
            return true;
        }

        // 校验通过
        if (ArrayUtils.contains(values, value)) {
            return true;
        }

        // 校验不通过
        context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值
        context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate()
            .replaceAll("\\{value}", Convert.toStr(values))).addConstraintViolation(); // 重新添加错误提示语句
        return false;
    }
}
